//使用nodemon app.js 我们项目就运行起来了。
/*
    git pull
    npm start | npm run dev
    CTRL + C
    CTRL + V
    git add .
    git commit -m 
    git push
    下班
*/

const express = require('express')
const app = express()
app.listen(3000, function () {
    console.log('3000端口开启了，可以访问: http://localhost:3000')
})

const path = require('path') //join
const fs = require('fs')
//引入小图标
const favicon = require('serve-favicon')

const mysql = require('mysql')

const connObj = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    port: 3306,
    database: 'web803'
})



//开放静态资源
app.use('/static', express.static('static'))
app.use('/uploads', express.static('uploads'))
//设置小图标  如果未出来 强制刷新一下 CTRL+F5
app.use(favicon('favicon.ico'))
//接收post参数的中间件
app.use(express.urlencoded({ extended: false }))

//使用ejs
app.set('view engine', 'ejs')

//moment或time-stamp
//引入模块
const timeStamp = require('time-stamp')


//文件上传的相关模块
const formidable = require('formidable')



app.get('/', (req, res) => {
    res.send('我是网站的首页')
})


// get :  login  ->   渲染登录表单页面
app.get('/login', (req, res) => {
    // let filepath = path.join(__dirname, 'views/login.html')
    // res.sendFile(filepath)
    res.render('login')
})

// get ： register -> 渲染注册表单页面
app.get('/register', (req, res) => {
    // let filepath = path.join(__dirname, 'views/register.html')
    // res.sendFile(filepath)
    res.render('register')
})

// get ： users 用户数据
app.get('/users', (req, res) => {
    // let filepath = path.join(__dirname, 'views/users.html')
    // res.sendFile(filepath)

    // let userData = [
    //     {
    //         "username": "617417",
    //         "password": "111111",
    //         "time": "2021-10-20 10:20:18",
    //         "avatar": "20211020102018218962.jpg"
    //     },
    //     {
    //         "username": "xm12346",
    //         "password": "xm12346",
    //         "time": "2021-10-20 10:20:27",
    //         "avatar": "20211020102027987527.jpg"
    //     }
    // ]
    let userData = fs.readFileSync('persons.json', 'utf8')
    userData = JSON.parse(userData) //把jsnon字符串转换成对象

    res.render('users', { userData })
})


//真正的实现登录功能
app.post('/login', (req, res) => {

    const form = formidable({
        uploadDir: 'uploads'
    })

    form.parse(req, (err, fields, files) => {
        let { username, password } = fields
        if (!username) {
            res.send('请输入用户名')
            return
        }
        if (!password) {
            res.send('请输入密码')
            return
        }
        let sql2 = `SELECT username,password FROM users`
        connObj.query(sql2, (err, result) => {

            let userIndex = result.findIndex(item => {
                return item.username === username && item.password === password})

            if (userIndex == -1) {
                res.send('用户名或密码错误')
            } else {
                res.send('登录成功')
            }
        })
    })
//     // let user = req.query //接收用户传递过来的参数
//     //res.send('我要实现登录' )
//     // let result = fs.readFileSync('./persons.json', { encoding: 'utf-8' });
//     // result = JSON.parse(result);

//     //2. 查找有无匹配的条件的数据  find/findIndex

//     // res.send( req.query )
})

//实现注册
app.post('/register', (req, res) => {

    //实例化接收文件数据的表单实例
    const form = formidable({
        uploadDir: 'uploads',//上传的临时路径
    })

    form.parse(req, (err, fields, files) => {


        // let name = files.f1.name
        // let suffixName = path.extname(name) //得到了后缀名 带点的。       
        // let t = timeStamp('YYYYMMDDHHmmss')
        // let ran = (Math.random() + '').substring(2, 8)
        // // console.log( t + ran + suffixName )

        // //应该在此处做一些判断 : 不能超过2M，必须是图片类型  2*1024KB

        // //files.f1.path: 原路径
        // let oldpath = files.f1.path
        // //let newpath = 'uploads/' + files.f1.name  //保留原文件名的文件上传
        // let avatar = t + ran + suffixName
        // let newpath = 'uploads/' + avatar
        // fs.renameSync(oldpath, newpath)

        // res.send(fields)
        //1. 接收参数
        let { username = '', password = '', repwd = '' } = fields // 对象的解构赋值
        //去除左右空格
        let reg = /^\s+|\s+$/g
        username = username.replace(reg, '')

        let time = timeStamp('YYYY-MM-DD HH:mm:ss')

        // console.log(time);


        //2. 必须做一些数据验证
        //2.1 是否为空
        if (username == '' || !password || !repwd) {
            res.send('请传递必要参数')
            return //都已经send响应结果了，没必要再往下执行
        }
        // //2. 格式判断： 长度
        // //用户名不到小于5位 不能大于 15位
        if (username.length < 5 || username.length > 15) {
            res.send('用户名不到小于5位 不能大于 15位')
            return
        }
        // //两次密码不一致
        if (password != repwd) {
            res.send('两次密码不一致')
            return
        }

        //3. 注册的逻辑判断
        //     let persons = fs.readFileSync('persons.json', 'utf8')
        //     // console.log( persons,'这是string' )
        //     persons = JSON.parse(persons) //把jsnon字符串转换成对象

        //     //user 用户访问某个表单，传递过来的
        //     // let user = { username: "zs123", password: "222" }

        //     let index = persons.findIndex(item => { //如果是想遍历数组中的所有数据，只能用forEach
        //         // console.log( 123 )
        //         return item.username == username  //当找到了，则不会向下遍历 了
        //     })

        //     // console.log( index,'是否找到' )

        //     if (index != -1) {
        //         res.send('用户名太香了~')
        //         return
        //     } else {
        //         res.send('注册成功')

        //         // let time = '2021-10-19 09:55:30'
        //         let time = timeStamp('YYYY-MM-DD HH:mm:ss')

        //         // persons.push({ username, password, time,avatar })
        //         // console.log(persons, '添加到末尾了')

        //         //写入到persons.json文件中
        //         // persons = JSON.stringify(persons) //再转换成json字符串
        //         // fs.writeFileSync('persons.json', persons)
        //         return
        //     }
        let sql = `INSERT INTO users ( username,password,regtime ) VALUES ('${username}','${password}','${time}')`
        connObj.query(sql, (err, result) => {
            res.send('注册成功')
    })
   
    })

    // return


    // res.send('实现注册的')
})